給定一個整數陣列candies
,candies[i]
代表第i個小孩的糖果數量。另外有一個整數extraCandies
,代表我有多餘的糖果數量。
回傳一個布林陣列,如果把全部的extraCandies
都給第i個小孩的話,他將會有最多的糖果數量,那麼result[i]
將為True
;反之,則為False
。
以下為LeetCode上的兩個範例與條件限制。LeetCode的範例1解釋的非常清楚。
此題有兩種解法。
candies
中最多的糖果數量。candies
中的每一項,如果加上extraCandies
後大於等於candies
中最多的糖果數量的話,那麼輸出的陣列中此項則為True
;反之則為False
。其實解法2用comprehension的想法跟解法1是一樣的,只是Python特有的此寫法可以讓程式碼的行數大幅降低。執行速度並不會比較快。
class Solution:
def kidsWithCandies(self, candies: List[int], extraCandies: int) -> List[bool]:
max_candy = max(candies)
output = []
for i in range(len(candies)):
if candies[i] + extraCandies >= max_candy:
output.append(True)
else:
output.append(False)
return output
class Solution:
def kidsWithCandies(self, candies: List[int], extraCandies: int) -> List[bool]:
max_candy = max(candies)
return [candies[i] + extraCandies >= max_candy for i in range(len(candies))]
我認為用Comprehension表示時需要非常懂自己的程式在寫什麼,像是今天的範例他就只用了一行表達出原本七行的程式碼。建議如果是要給程式新手看的程式碼,還是把他展開來用for迴圈寫會比較清楚。